package com.ss.mq.pattern.simple;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.ss.mq.util.RabbitUtils;

/**
 * @author 叁昇
 * @create 2020-12-10-18:21
 */
public class SimpleProducer {
    public static void main(String[] args) throws Exception {
        // 建立连接
        Connection connection = RabbitUtils.getConnection();

        // 建立信道
        Channel channel = connection.createChannel();

        /*
          声明队列:
          会在 mq 中创建一个队列
          如果已经创建过该队列, 则不能使用其他参数重新覆盖创建

          参数含义:
           - queue: 队列名称
           - durable: 持久化, false 表示重启 mq 队列销毁
           - exclusive: 排他, false 表示不限制仅当前连接可用
           - autoDelete: 是否在最后一个消费者断开后, 自动删除队列, false 表示不自动删除
           - arguments: 其他参数 (map)
         */
        channel.queueDeclare("SimpleQueue", false, false, false, null);

        /*
          发布消息:
          此方法将消息向默认交换机发送
          默认交换机隐含与所有队列绑定, routing key 即为队列名称

          参数含义:
           - exchange: 交换机名称, 空串表示默认交换机 "AMQP default"
           - routingKey: 路由键, 对于默认交换机, routingKey 就是目标队列名称
           - props: 其他参数, 例如头信息等..
           - body: 消息内容的 byte[] 数组
         */
        channel.basicPublish("", "SimpleQueue", null, "Hello RabbitMQ!".getBytes());

        System.out.println("消息已发送!");
        // 关闭信道
        channel.close();
    }
}
